package com.itheima.interceptors;

import com.itheima.utils.JwtUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class TokenInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        //1. 获取到请求路径 url , httpServletRequest
        String url = request.getRequestURI();//

        //2. 判断是否是登录请求 , 如果路径中 url包含 /login , 说明是登陆操作 , 放行.
        if (url.toString().contains("login")) {
            return true;
        }

        //3. 获取请求头中的 JWT令牌(token)
        String token = request.getHeader("token");

        //4. 判断令牌 token是否存在 , 如果不存在 , 说明用户没有登陆 , 返回错误信息(响应401状态码)
        if (token == null || token.isEmpty()) {
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);//401
            return false;//不能忘!!!!!!!
        }

        //5. 如果令牌 token 存在 , 校验令牌 , 如果校验失败 -> 返回错误信息 (响应401状态码)
        try {
            JwtUtils.parseJWT(token);
        } catch (Exception e) {
            response.setStatus(401);//401
            return true;
        }

        //6. 校验通过 , 放行
        return true;
    }
}

